
#include "Joueur.h"

void initJoueur (Joueur *pJou)
{
    pJou->id = 0;
    pJou->position = 0;
    pJou->scoreCredit = 0;
    pJou->pseudo = NULL;
    pJou->bonus_joueur = (Bonus *) malloc(sizeof(Bonus));
    initBonus(pJou->bonus_joueur);
    pJou->etat = 1;
}

void libereJoueur(Joueur *pJou)
{
    pJou->id = 0;
    pJou->position = 0;
    pJou->scoreCredit = 0;
    pJou->pseudo = NULL;
    libereBonus(pJou->bonus_joueur);
    free(pJou->bonus_joueur);
    pJou->bonus_joueur = NULL;
    pJou->etat = 0;
}

Joueur * creerJoueur(int id, char * pseudo )
{
   Joueur *pJou = (Joueur *) malloc (sizeof(Joueur));
   initJoueur(pJou);
   pJou->pseudo = pseudo;
   assert(id != 0);
   pJou->id = id;
   return pJou;
}

void detruitJoueur(Joueur **ppJou)
{
    libereJoueur(*ppJou);
    free(*ppJou);
    *ppJou = NULL;

}

void set_id(Joueur *pJou,int id)
{
    assert (id != 0);
    pJou->id = id;
}

int get_id(const Joueur *pJou)
{
    return pJou->id;
}

void set_pseudo(Joueur *pJou, const char *pseudo)
{
    strcpy(pJou->pseudo, pseudo);
}

char * get_pseudo(const Joueur *pJou)
{
    return pJou->pseudo;
}

void set_position(Joueur *pJou,int position)
{
    pJou->position=position;
}

int get_position(const Joueur *pJou)
{
    return pJou->position;
}

void set_score(Joueur *pJou,int score)
{
    pJou->scoreCredit = score;
}

int get_score(const Joueur *pJou)
{
    return pJou->scoreCredit;
}

Bonus * get_bonus_joueur(const Joueur *pJou)
{
    return pJou->bonus_joueur;
}

void set_etat(Joueur *pJou, bool etat)
{
    pJou->etat = etat;
}

bool get_etat (const Joueur *pJou)
{
    return pJou->etat;
}

void consequenceCarteJoueur(const Carte * C, Joueur * j)
{
	int genre = getGenreCarte(C);
	switch(genre)
	{
		case 1:
			set_position(j,get_position(j)+3);
			break;
		case 2:
			set_position(j,get_position(j)-3);
			break;
		case 3:
			set_score(j,get_score(j)+1);
			break;
		case 4:
			set_score(j,get_score(j)-1);
			break;
		case 5:
			set_etat(j,0);
			break;
		case 6:
			set_triche(j->bonus_joueur,C);
			break;
		case 7:
			set_triche(j->bonus_joueur,C);
			break;
	}
}

void jouTestRegression()
{
    Joueur *pJou;
    /*Bonus *pBon;
    pBon = creerBonus();*/

    Des des;
    desInit(&des);
    lancerDes(&des);

    char pseudo[16] = "Poutiyou";
    char pseudo1[16] = "Poutiyou01";

    printf("appel a creerJoueur \n");
    pJou =creerJoueur(3, pseudo);

    printf("=Test De Regression=\n");
    assert(pJou->id == 3);
    assert(pJou->position == 0);
    assert(pJou->scoreCredit == 0);
    assert(pJou->etat == 1);

    printf("appel a set_id \n");
    set_id(pJou , 4);
    printf("appel a set_pseudo \n");
    set_pseudo(pJou,pseudo1 );
    printf("appel a set_position \n");
    set_position(pJou, 30);
    printf("appel a set_score \n");
    set_score(pJou,31);
    printf("appel a set_etat \n");
    set_etat(pJou,1);
    printf("Joueur description id = %d \n pseudo = %s \n position = %d \n score = %d \n etat = %d \n", get_id(pJou), get_pseudo(pJou), get_position(pJou),
            get_score(pJou), get_etat(pJou) );

    desLibere(&des);
   /* detruitBonus(&pBon);*/
    detruitJoueur(&pJou);


    printf("=Fin Test De Regression: OK =\n");
}





